package errorx

import "gin-study/pkg/response"

type CodeError struct {
	*response.Response
}

type CodeErrorResponse struct {
	*response.Response
}

func NewCustomError(code int, data interface{}, msg string) error {
	return &CodeError{
		Response: response.NewCustomResponse(code, data, msg),
	}
}

func NewErrorWithCode(code int, msg string) error {
	return &CodeError{
		Response: response.NewCustomResponse(code, nil, msg),
	}
}

func ParseError(err error) error {
	if err != nil {
		return NewErrorWithCode(response.ERROR, err.Error())
	}

	return nil
}

func ParseErrorWithCode(code int, err error) error {
	if err != nil {
		return NewErrorWithCode(code, err.Error())
	}

	return nil
}

func NewDefaultError(msg string) error {
	return NewErrorWithCode(response.ERROR, msg)
}

func (e *CodeError) Error() string {
	return e.Msg
}

func (e *CodeError) Resp() *CodeErrorResponse {
	return &CodeErrorResponse{
		Response: &response.Response{
			Code: e.Code,
			Data: e.Data,
			Msg:  e.Msg,
		},
	}
}
